package org.jeecg.modules.SellsSavesModule.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.ParameterModule.entity.LocationInfo;
import org.jeecg.modules.ParameterModule.entity.ReservoirInfo;
import org.jeecg.modules.ParameterModule.entity.ShelvesInfo;
import org.jeecg.modules.ParameterModule.entity.WarehouseInfo;
import org.jeecg.modules.SellsSavesModule.entity.*;

import java.util.List;

public interface InventoryService extends IService<InstorageDanInfo> {
    /**
     * 入库单的分页查询
     */
    IPage<InstorageDanInfo> query_InstorageDanInfoPageList(Page<InstorageDanInfo> page, String queryCode, String queryStatus);
    /**
     * 根据id查询入库单详情
     */
    InstorageDanInfo query_instorageDanById(String id);
    /**
     * 增加入库单
     */
    int add_InstorageDan(InstorageDanInfo datainfo);
    /**
     * 修改入库单
     */
    int update_InstorageDan(InstorageDanInfo datainfo);
    /**
     * 修改入库单的状态
     */
    int change_InstorageDan_status(String id,String status);

    /**
     * 增加入库单下的商品列表
     */
    int add_InstorageDan_goods(InstorageDanGoods datainfo);
    /**
     * 入库单下的商品的分页查询
     */
    IPage<InstorageDanGoods> query_InstorageDanGoodsPageList(Page<InstorageDanGoods> page,String top_id);
    /**
     * 删除入库单下的商品列表
     */
    int delete_InstorageDan_goods(String id,String status);

    /**
     * 分页查询商品面料统合表
     * @return
     */
    IPage<GoodsInfo> query_GoodsFabricPageList(Page<GoodsInfo> page, String goods_code, String supplierGoodsCode);
    /**
     * 分页查询入库配置项
     * @return
     */
    IPage<InstorageItemsInfo> query_rukuitemsPageList(Page<InstorageItemsInfo> page,String top_id,int type);
    /**
     * 入库下商品id查询所有配置的入库项
     */
    List<InstorageItemsInfo> query_rukuitems(String instorageGoodsId);
    /**
     * 增加入库配置项
     */
    int add_Instorageitems(InstorageItemsInfo itemsInfo);
    /**
     * 删除入库配置项
     */
    int delete_Instorageitems(String id,String status);

    /**
     * 根据id查询入库单下商品详情
     */
    InstorageDanGoods query_instorageDan_goodsById(String id);
    /**
     * 根据入库下的商品id修改剩余库存
     */
    int update_instoragegood_count(String id,String remainingNumber);

    /**
     * 根据商品id查询所有规格
     */
    List<GoodsSpecifications> query_allSpecificationsBygoodId(String goodsId);
    /**
     * 根据商品id查询所有尺码
     */
    List<GoodsSizeInfo> query_allSizeBygoodId(String goodsId);
    /**
     * 查询所有仓库
     */
    List<WarehouseInfo> query_allWarehouse();
    /**
     * 查询所有仓库下的库区
     */
    List<ReservoirInfo> query_allReservoirBycangkuId(String cankgu_id);
    /**
     * 根据库区id查询所有货架
     */
    List<ShelvesInfo> query_allShelvesBykuquId(String kuqu_id);
    /**
     * 根据货架id查询所有库位
     */
    List<LocationInfo> query_allLocationByhuojiaId(String huojia_id);

    /**
     * 根据入库单id和商品id查询入库单下的商品
     */
    InstorageDanGoods query_instorageDangoodsBygoodId(String instorageDan_id,String good_id);


    /**
     * 根据id查询入库项详情
     */
    InstorageItemsInfo query_InstorageItemsInfoById(String id);

    /**
     * 根据入库申请单id查询下面所有的入库项
     * 参数type:0查询全部，1根据商品id分组
     */
    List<InstorageItemsInfo> query_allInstorageItemsByrukudanId(String rukudan_id,int type);
    /**
     * 根据入库申请单id统计待入库状态
     */
    int count_waitRuku(String rukudan_id,int status);
    /**
     * 插入库存表
     */
    int insert_inventory(InventoryInfo object);
    /**
     * 修改库存表
     */
    int update_inventory(InventoryInfo object);
    /**
     * 插入库存下的批次表
     */
    int insert_inventory_batch(InventoryBatchInfo object);
    /**
     * 修改库存下的批次表
     */
    int update_inventory_batch(InventoryBatchInfo object);

    /**
     * 根据商品id查询库存
     */
    InventoryInfo query_InventoryInfoBygoodsId(String goods_id);
    /**
     * 根据商品id和批次名称查询库存下的批次
     */
    InventoryBatchInfo query_InventoryBatchBygoodsId(String goods_id,String batch_name);
    /**
     * 根据商品id查询商品详情
     */
    GoodsInfo query_goodsDetailBygoodsId(String goods_id);
    /**
     * 修改入库单状态
     */
    int update_rukudan_status(String rukudan_id,int status);


    /**
     * 根据库位id查询入库项详情
     */
    InstorageItemsInfo query_InstorageItemsBylocationId(String locationId);


}
